@(info: Option[Any])(implicit context: gitbucket.core.controller.Context)
@import context._
@import gitbucket.core.view.helpers._
@import gitbucket.core.util.Directory._
@html.main("System Settings"){
  @menu("system"){
    @helper.html.information(info)
    <form action="@path/admin/system" method="POST" validate="true" class="form-horizontal">
      <div class="panel panel-default">
        <div class="panel-heading strong">System Settings</div>
        <div class="panel-body">
          <!--====================================================================-->
          <!-- GITBUCKET_HOME -->
          <!--====================================================================-->
          <label class="strong">GITBUCKET_HOME</label>
          @GitBucketHome
          <!--====================================================================-->
          <!-- Base URL -->
          <!--====================================================================-->
          <hr>
          <label><span class="strong">Base URL</span> (e.g. <code>http://example.com/gitbucket</code>)</label>
          <fieldset>
              <div class="controls">
                <input type="text" name="baseUrl" id="baseUrl" class="form-control" value="@settings.baseUrl"/>
                <span id="error-baseUrl" class="error"></span>
              </div>
          </fieldset>
          <p class="muted">
            The base URL is used for redirect, notification email, git repository URL box and more.
            If the base URL is empty, GitBucket generates URL from request information.
            You can use this property to adjust URL difference between the reverse proxy and GitBucket.
          </p>
          <!--====================================================================-->
          <!-- Information -->
          <!--====================================================================-->
          <hr>
          <label><span class="strong">Information</span> (HTML is available)</label>
          <fieldset>
            <textarea name="information" class="form-control" style="height: 100px;">@settings.information</textarea>
          </fieldset>
          <!--====================================================================-->
          <!-- Account registration -->
          <!--====================================================================-->
          <hr>
          <label class="strong">Account registration</label>
          <fieldset>
            <label class="radio">
              <input type="radio" name="allowAccountRegistration" value="true"@if(settings.allowAccountRegistration){ checked}>
              <span class="strong">Allow</span> <span class="normal">- Users can create accounts by themselves.</span>
            </label>
            <label class="radio">
              <input type="radio" name="allowAccountRegistration" value="false"@if(!settings.allowAccountRegistration){ checked}>
              <span class="strong">Deny</span> - <span class="normal">Only administrators can create accounts.</span>
            </label>
          </fieldset>
          <hr>
          <label class="strong">Default option to create a new repository</label>
          <fieldset>
            <label class="radio">
              <input type="radio" name="isCreateRepoOptionPublic" value="true"@if(settings.isCreateRepoOptionPublic){ checked}>
              <span class="strong">Public</span> <span class="normal">- All users and guests can read that repository.</span>
            </label>
            <label class="radio">
              <input type="radio" name="isCreateRepoOptionPublic" value="false"@if(!settings.isCreateRepoOptionPublic){ checked}>
              <span class="strong">Private</span> <span class="normal">- Only collaborators can read that repository.</span>
            </label>
          </fieldset>
          <!--====================================================================-->
          <!-- Anonymous access -->
          <!--====================================================================-->
          <hr>
          <label class="strong">Anonymous access</label>
          <fieldset>
            <label class="radio">
              <input type="radio" name="allowAnonymousAccess" value="true"@if(settings.allowAnonymousAccess){ checked}>
              <span class="strong">Allow</span> <span class="normal">- Anyone can view public repositories, user/group profiles.</span>
            </label>
            <label class="radio">
              <input type="radio" name="allowAnonymousAccess" value="false"@if(!settings.allowAnonymousAccess){ checked}>
              <span class="strong">Deny</span> <span class="normal">- Users must authenticate before viewing any information.</span>
            </label>
          </fieldset>
          <!--====================================================================-->
          <!-- Activity -->
          <!--====================================================================-->
          <hr>
          <label><span class="strong">Limit of activity logs</span> (Unlimited if it's not specified or zero)</label>
          <div class="controls">
            <input type="text" id="activityLogLimit" name="activityLogLimit" class="form-control input-mini" value="@settings.activityLogLimit"/>
            <span id="error-activityLogLimit" class="error"></span>
          </div>
          <!--====================================================================-->
          <!-- Services -->
          <!--====================================================================-->
          <hr>
          <label class="strong">Services</label>
          <fieldset>
            <label class="checkbox">
              <input type="checkbox" name="gravatar"@if(settings.gravatar){ checked}/>
              Use Gravatar for Profile-Images
            </label>
          </fieldset>
          <!--====================================================================-->
          <!-- SSH access -->
          <!--====================================================================-->
          <hr>
          <label class="strong">SSH access</label>
          <fieldset>
            <label class="checkbox">
              <input type="checkbox" id="ssh" name="ssh"@if(settings.ssh){ checked}/>
              Enable SSH access to git repository
            </label>
          </fieldset>
          <div class="ssh">
            <div class="form-group">
              <label class="control-label col-md-3" for="sshHost">SSH Host</label>
              <div class="col-md-9">
                <input type="text" id="sshHost" name="sshHost" class="form-control" value="@settings.sshHost"/>
                <span id="error-sshHost" class="error"></span>
              </div>
            </div>
            <div class="form-group">
              <label class="control-label col-md-3" for="sshPort">SSH Port</label>
              <div class="col-md-9">
                <input type="text" id="sshPort" name="sshPort" class="form-control" value="@settings.sshPort"/>
                <span id="error-sshPort" class="error"></span>
              </div>
            </div>
          </div>
          <p class="muted">
             Both of SSH host and Base URL are required if SSH access is enabled.
          </p>
          <!--====================================================================-->
          <!-- Authentication -->
          <!--====================================================================-->
          <hr>
          <label class="strong">Authentication</label>
          <fieldset>
            <label class="checkbox">
              <input type="checkbox" id="ldapAuthentication" name="ldapAuthentication"@if(settings.ldap){ checked} />
              LDAP
            </label>
          </fieldset>
          <div class="ldap">
            <div class="form-group">
              <label class="control-label col-md-3" for="ldapHost">LDAP Host</label>
              <div class="col-md-9">
                <input type="text" id="ldapHost" name="ldap.host" class="form-control" value="@settings.ldap.map(_.host)"/>
                <span id="error-ldap_host" class="error"></span>
              </div>
            </div>
            <div class="form-group">
              <label class="control-label col-md-3" for="ldapPort">LDAP Port</label>
              <div class="col-md-9">
                <input type="text" id="ldapPort" name="ldap.port" class="form-control input-mini" value="@settings.ldap.map(_.port)"/>
                <span id="error-ldap_port" class="error"></span>
              </div>
            </div>
            <div class="form-group">
              <label class="control-label col-md-3" for="ldapBindDN">Bind DN</label>
              <div class="col-md-9">
                <input type="text" id="ldapBindDN" name="ldap.bindDN" class="form-control" value="@settings.ldap.map(_.bindDN)"/>
                <span id="error-ldap_bindDN" class="error"></span>
              </div>
            </div>
            <div class="form-group">
              <label class="control-label col-md-3" for="ldapBindPassword">Bind Password</label>
              <div class="col-md-9">
                <input type="password" id="ldapBindPassword" name="ldap.bindPassword" class="form-control" value="@settings.ldap.map(_.bindPassword)"/>
                <span id="error-ldap_bindPassword" class="error"></span>
              </div>
            </div>
            <div class="form-group">
              <label class="control-label col-md-3" for="ldapBaseDN">Base DN</label>
              <div class="col-md-9">
                <input type="text" id="ldapBaseDN" name="ldap.baseDN" class="form-control" value="@settings.ldap.map(_.baseDN)"/>
                <span id="error-ldap_baseDN" class="error"></span>
              </div>
            </div>
            <div class="form-group">
              <label class="control-label col-md-3" for="ldapUserNameAttribute">User name attribute</label>
              <div class="col-md-9">
                <input type="text" id="ldapUserNameAttribute" name="ldap.userNameAttribute" class="form-control" value="@settings.ldap.map(_.userNameAttribute)"/>
                <span id="error-ldap_userNameAttribute" class="error"></span>
              </div>
            </div>
            <div class="form-group">
              <label class="control-label col-md-3" for="ldapAdditionalFilterCondition">Additional filter condition</label>
              <div class="col-md-9">
                <input type="text" id="ldapAdditionalFilterCondition" name="ldap.additionalFilterCondition" class="form-control" value="@settings.ldap.map(_.additionalFilterCondition)"/>
                <span id="error-ldap_additionalFilterCondition" class="error"></span>
              </div>
            </div>
            <div class="form-group">
              <label class="control-label col-md-3" for="ldapFullNameAttribute">Full name attribute</label>
              <div class="col-md-9">
                <input type="text" id="ldapFullNameAttribute" name="ldap.fullNameAttribute" class="form-control" value="@settings.ldap.map(_.fullNameAttribute)"/>
                <span id="error-ldap_fullNameAttribute" class="error"></span>
              </div>
            </div>
            <div class="form-group">
              <label class="control-label col-md-3" for="ldapMailAttribute">Mail address attribute</label>
              <div class="col-md-9">
                <input type="text" id="ldapMailAttribute" name="ldap.mailAttribute" class="form-control" value="@settings.ldap.map(_.mailAttribute)"/>
                <span id="error-ldap_mailAttribute" class="error"></span>
              </div>
            </div>
            <div class="form-group">
              <label class="control-label col-md-3">Enable TLS</label>
              <div class="col-md-9">
                <input type="checkbox" name="ldap.tls"@if(settings.ldap.flatMap(_.tls).getOrElse(false)){ checked}/>
              </div>
            </div>
            <div class="form-group">
              <label class="control-label col-md-3">Enable SSL</label>
              <div class="col-md-9">
                <input type="checkbox" name="ldap.ssl"@if(settings.ldap.flatMap(_.ssl).getOrElse(false)){ checked}/>
              </div>
            </div>
            <div class="form-group">
              <label class="control-label col-md-3" for="ldapBindDN">Keystore</label>
              <div class="col-md-9">
                <input type="text" id="ldapKeystore" name="ldap.keystore" class="form-control" value="@settings.ldap.map(_.keystore)"/>
                <span id="error-ldap_keystore" class="error"></span>
              </div>
            </div>
          </div>
          <!--====================================================================-->
          <!-- Notification email -->
          <!--====================================================================-->
          <hr>
          <label class="strong">Notifications</label>
          <fieldset>
            <label class="checkbox">
              <input type="checkbox" id="notification" name="notification"@if(settings.notification){ checked}/>
              Send notifications
            </label>
          </fieldset>
          <!--====================================================================-->
          <!-- Communication email -->
          <!--====================================================================-->
          <hr>
          <label class="strong">Communication</label>
          <fieldset>
            <label class="checkbox">
              <input type="checkbox" id="useSMTP" name="useSMTP" @if(settings.useSMTP){ checked}/>
              SMTP
            </label>
          </fieldset>
          <div class="useSMTP">
            <div class="form-group">
              <label class="control-label col-md-3" for="smtpHost">SMTP Host</label>
              <div class="col-md-9">
                <input type="text" id="smtpHost" name="smtp.host" class="form-control" value="@settings.smtp.map(_.host)"/>
                <span id="error-smtp_host" class="error"></span>
              </div>
            </div>
            <div class="form-group">
              <label class="control-label col-md-3" for="smtpPort">SMTP Port</label>
              <div class="col-md-9">
                <input type="text" id="smtpPort" name="smtp.port" class="form-control input-mini" value="@settings.smtp.map(_.port)"/>
                <span id="error-smtp_port" class="error"></span>
              </div>
            </div>
            <div class="form-group">
              <label class="control-label col-md-3" for="smtpUser">SMTP User</label>
              <div class="col-md-9">
                <input type="text" id="smtpUser" name="smtp.user" class="form-control" value="@settings.smtp.map(_.user)"/>
              </div>
            </div>
            <div class="form-group">
              <label class="control-label col-md-3" for="smtpPassword">SMTP Password</label>
              <div class="col-md-9">
                <input type="password" id="smtpPassword" name="smtp.password" class="form-control" value="@settings.smtp.map(_.password)"/>
              </div>
            </div>
            <div class="form-group">
              <label class="control-label col-md-3" for="smtpPassword">Enable SSL</label>
              <div class="col-md-9">
                <input type="checkbox" name="smtp.ssl"@if(settings.smtp.flatMap(_.ssl).getOrElse(false)){ checked}/>
              </div>
            </div>
            <div class="form-group">
              <label class="control-label col-md-3" for="fromAddress">FROM Address</label>
              <div class="col-md-9">
                <input type="text" id="fromAddress" name="smtp.fromAddress" class="form-control" value="@settings.smtp.map(_.fromAddress)"/>
              </div>
            </div>
            <div class="form-group">
              <label class="control-label col-md-3" for="fromName">FROM Name</label>
              <div class="col-md-9">
                <input type="text" id="fromName" name="smtp.fromName" class="form-control" value="@settings.smtp.map(_.fromName)"/>
              </div>
            </div>
            <p class="muted">
              Enable notification not only SMTP configuration if you want to send notification email.
            </p>
          </div>
        </div>
      </div>
      <div class="align-right" style="margin-top: 20px;">
        <input type="submit" class="btn btn-success" value="Apply changes"/>
      </div>
    </form>
  }
}
<script>
$(function(){
  $('#ssh').change(function(){
    $('.ssh input').prop('disabled', !$(this).prop('checked'));
  }).change();

  $('#useSMTP').change(function(){
    $('.useSMTP input').prop('disabled', !$(this).prop('checked'));

    // With only SMTP in current version, notification cannot be enabled if no communication channel exists
    $('#notification').prop('disabled', !$(this).prop('checked'));

    if (!$(this).prop('checked')) {
      // With only SMTP in current version, if SMTP is unchecked then we disable notification
      $('#notification').prop('checked', false);
    }
  }).change();

  $('#ldapAuthentication').change(function(){
    $('.ldap input').prop('disabled', !$(this).prop('checked'));
  }).change();
});
</script>
